﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace OneDimentionArrays
{
    class Program
    {
        static void Main(string[] args)
        {
            string cont;
            do
            {
                Console.Write("Выберите задачу для решения 1/2/3/4/5/\n" +
                    "1 - Задача про максимум из одномерного массива на 5 чисел\n" +
                    "2 - Задача про количество отличных от минимума на 5 в произвольном массиве\n" +
                    "3 - Задача про определение суммы элементов до максимального\n" +
                    "4 - Задача про последнее минимальное значение в массиве из 8\n" +
                    "5 - Задача про замену элементов массива после максимума на среднее арифметическое\n");
                string choiceTask = Console.ReadLine();
                switch (choiceTask)
                {
                    case "1":
                        Console.WriteLine("Выбрана задача про максимум из одномерного массива на 5 чисел");
                        FiveDigitsArray();
                        break;
                    case "2":
                        Console.WriteLine("Выбрана задача про количество отличных от минимума на 5 в произвольном массиве");
                        MinPlusFiveCheck();
                        break;
                    case "3":
                        Console.WriteLine("Выбрана задача про определение суммы элементов до максимального");
                        TillMaxElement();
                        break;
                    case "4":
                        Console.WriteLine("Выбрана задача про последнее минимальное в массиве из 8");
                        LastNegNumber();
                        break;
                    case "5":
                        Console.WriteLine("Выбрана задача про замену элементов массива после максимума на среднее арифметическое");
                        DigitsAfterMaxToAverage();
                        break;
                    default:
                        Console.WriteLine("Неверный ввод");
                        break;
                }
                Console.WriteLine("решить ещё одну задачу y/n");
                cont = Console.ReadLine().ToLower();
                Console.Clear();
            } while (cont == "y");
        }

        //methods
        static void FiveDigitsArray()
        {
            int max = Int32.MinValue;
            int[] fiveArray = new int[5];

            for (int i = 0; i <= 4; i++)
            {
                Console.Write("Введите [{0}]", i);
                fiveArray[i] = Int32.Parse(Console.ReadLine());
                if (fiveArray[i] > max)
                {
                    max = fiveArray[i];
                }
            }
            for (int i = 0; i <= 4; i++)
            {
                Console.WriteLine(fiveArray[i]);
            }
            Console.WriteLine("Max value in array = {0}", max);
        }

        static void MinPlusFiveCheck()
        {
            Console.WriteLine("Укажите размер массива");
            int arraySize = Int32.Parse(Console.ReadLine());
            int countDifference = 0;
            int min = Int32.MaxValue;
            int[] sizedArray = new int[arraySize];

            for (int i = 0; i < arraySize; i++)
            {
                Console.Write("[{0}] ", i);
                sizedArray[i] = Int32.Parse(Console.ReadLine());
                if (sizedArray[i] < min)
                {
                    min = sizedArray[i];
                }

            }
            for (int i = 0; i < arraySize; i++)
            {
                if (sizedArray[i] == min + 5)
                {
                    countDifference++;
                }
            }
            Console.WriteLine("От минимального значения на 5 отличается {0} элементов массива", countDifference);

        }
        static void TillMaxElement()
        {
            Console.WriteLine("Укажите размер массива");
            int arraySize = Int32.Parse(Console.ReadLine());
            int countQuantity = 0;
            int countSum = 0;
            int max = Int32.MinValue;
            int[] sizedArray = new int[arraySize];

            for (int i = 0; i < arraySize; i++)
            {
                Console.Write("[{0}] ", i);
                sizedArray[i] = Int32.Parse(Console.ReadLine());
                if (sizedArray[i] > max)
                {
                    max = sizedArray[i];
                }
            }


            do
            {

                if (sizedArray[countQuantity] == max)
                {
                    break;
                }
                countSum = countSum + sizedArray[countQuantity];
                countQuantity++;

            } while (countQuantity < arraySize);

            Console.WriteLine("Максимальный элемент = {0}", max);
            Console.WriteLine("Количество элементов в массиве до максимального = {0}", countQuantity);
            Console.WriteLine("Сумма элементов в массиве до максимального = {0}", countSum);
        }

        static void LastNegNumber()
        {
            int[] EightArray = new int[8];
            int digitCounter = 8;
            int negativeValue = 0;

            for (int i = 0; i <= 7; i++)
            {
                Console.Write("[{0}]", i);
                EightArray[i] = Int32.Parse(Console.ReadLine());
            }

            for (int i = digitCounter - 1; i >= 0; i--)
            {
                digitCounter--;
                if (EightArray[i] < 0)
                {
                    negativeValue = EightArray[i];
                    break;
                }
            }
            if (negativeValue == 0)
            {
                Console.WriteLine("Нет отрицательных значений");
            }
            else
            {
                Console.WriteLine("Последнее отрицательное = {0}", negativeValue);
                Console.WriteLine("Номер в массиве {0}", digitCounter);
            }
        }

        static void DigitsAfterMaxToAverage()
        {
            int max;
            int maxIndex;
            int averageValue;
            Console.WriteLine("Введите размер массива");
            int arraySize = Int32.Parse(Console.ReadLine());

            //Ввод массива реализован методом ArrayFiller

            //int[] sizedArray = new int[arraySize];
            //for (int i = 0; i < arraySize; i++)
            //{
            //    Console.Write("[{0}]");
            //    sizedArray[i] = Int32.Parse(Console.ReadLine());
            //}

            int[] sizedArray = ArrayFiller(arraySize);

            Console.WriteLine("Вначале массив был такой: ");

            // Вывод массива методом ArrayToConsole
            ArrayToConsole(sizedArray, arraySize);

            max = ArrayMaxValue(sizedArray, arraySize);

            maxIndex = Array.IndexOf(sizedArray, max);            

            averageValue = sizedArray.Sum() / arraySize;

            for (int i = maxIndex + 1; i < arraySize; i++)
            {
                sizedArray[i] = averageValue;
            }
            Console.WriteLine("Но что-то пеменялось в матрице: ");
            ArrayToConsole(sizedArray, arraySize);

        }

        static void ArrayToConsole(int[] array, int arraySize)
        {
            for (int i = 0; i < arraySize; i++)
            {
                Console.Write("{0} ", array[i]);
            }
            Console.WriteLine();
        }

        static int ArrayMaxValue(int[] array,  int arraySize)
        {
            int max = Int32.MinValue;
            for (int i = 0;  i < arraySize; i++)
            {
                if (array[i] > max)
                {
                    max = array[i];
                }
            }
            return max;
        }

        static int[] ArrayFiller(int arraySize)
        {
            int[] newArray = new int[arraySize];
            for (int i = 0; i < arraySize; i++)
            {
                Console.Write("[{0}]", i);
                newArray[i] = Int32.Parse(Console.ReadLine());
            }
            return newArray;
        }
    }
}
